#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;

//打印pending表
void printset(){
    sigset_t pedset;
    sigemptyset(&pedset);
    sigpending(&pedset);
    for(int i=31;i>0;--i){
        cout<<sigismember(&pedset,i);
    }
    cout<<endl;
}

void handler(int sig){
    cout<< "catch a sig: " << sig << " pid: " << getpid() << endl;
}

int main(){
    //sigset_t newset,oldset;

    // sigemptyset(&newset);//清空newset信号集
    // sigfillset(&newset);//全部置1

    // sigprocmask(SIG_SETMASK,&newset,&oldset);//设置阻塞信号集

    sigset_t newset;
    sigemptyset(&newset);


    //signal(SIGINT,&handler);//捕捉2号信号
    //sigaction捕捉信号
    struct sigaction act;
    act.sa_handler = &handler;
    sigaction(SIGINT,&act,nullptr);

    int cnt = 1;

    while(true){
        if(cnt % 5 == 0){
            sigemptyset(&newset);
            sigprocmask(SIG_SETMASK,&newset,nullptr);//解除阻塞
        }else{
            sigaddset(&newset,SIGINT);
            sigprocmask(SIG_SETMASK,&newset,nullptr);//阻塞2号
        }
        ++cnt;
        printset();
        kill(getpid(),SIGINT);//给当前进程发2号信号
        sleep(1);
    }

    return 0;
}